/**
 * @param {number[][]} points
 * @return {number}
 */
var findMinArrowShots = function (points) {
  if (points.length === 0) return 0;

  // 按气球结束坐标升序排序
  points.sort((a, b) => a[1] - b[1]);

  let arrows = 1; // 至少需要一支箭
  let end = points[0][1]; // 第一支箭的位置在第一个气球的结束处

  for (let i = 1; i < points.length; i++) {
    // 如果当前气球的开始坐标大于前一个重叠区间的结束坐标，需要新的箭
    if (points[i][0] > end) {
      arrows++;
      end = points[i][1]; // 更新箭的位置到当前气球的结束处
    }
  }

  return arrows;
};